--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
android/app/src/main/java/com/meshchatx/StartupErrorReport.java 2fe900061e4d5da639a129894494e020b4b686d9 (2fe90006) Text, 4.68 KB
Tff7b72package T7ee787com.meshchatxTb4b4b4;
Tff7b72import T7ee787android.content.ContextTb4b4b4;
Tff7b72import T7ee787android.content.pm.PackageInfoTb4b4b4;
Tff7b72import T7ee787android.content.pm.PackageManagerTb4b4b4;
Tff7b72import T7ee787android.os.BuildTb4b4b4;
Tff7b72import T7ee787androidx.annotation.NonNullTb4b4b4;
Tff7b72import T7ee787androidx.annotation.NullableTb4b4b4;
T8b949e/**
* Formats Android startup / backend failure messages with app and device diagnostics
* so crash reports from older builds are easier to triage.
*/
Tff7b72public Tff7b72final Tff7b72class T56d364StartupErrorReport Tb4b4b4{
Tff7b72private Td2a8ffStartupErrorReportTb4b4b4(Tb4b4b4) Tb4b4b4{Tb4b4b4}
Tff7b72public Tff7b72static Tff7b72final Tff7b72class T56d364Diagnostics Tb4b4b4{
Tff7b72public Tff7b72final Te6edf3String Te6edf3appVersionNameTb4b4b4;
Tff7b72public Tff7b72final Te6edf3String Te6edf3appVersionCodeTb4b4b4;
Tff7b72public Tff7b72final Te6edf3String Te6edf3androidReleaseTb4b4b4;
Tff7b72public Tff7b72final Tffa657int Te6edf3sdkIntTb4b4b4;
Tff7b72public Tff7b72final Te6edf3String Te6edf3manufacturerTb4b4b4;
Tff7b72public Tff7b72final Te6edf3String Te6edf3modelTb4b4b4;
Tff7b72public Tff7b72final Te6edf3String Te6edf3deviceTb4b4b4;
Tff7b72public Td2a8ffDiagnosticsTb4b4b4(
Tf0883e@Nullable Te6edf3String Te6edf3appVersionNameTb4b4b4,
Tf0883e@Nullable Te6edf3String Te6edf3appVersionCodeTb4b4b4,
Tf0883e@Nullable Te6edf3String Te6edf3androidReleaseTb4b4b4,
Tffa657int Te6edf3sdkIntTb4b4b4,
Tf0883e@Nullable Te6edf3String Te6edf3manufacturerTb4b4b4,
Tf0883e@Nullable Te6edf3String Te6edf3modelTb4b4b4,
Tf0883e@Nullable Te6edf3String Te6edf3device
Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3appVersionName Tff7b72= Te6edf3appVersionNameTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3appVersionCode Tff7b72= Te6edf3appVersionCodeTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3androidRelease Tff7b72= Te6edf3androidReleaseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3sdkInt Tff7b72= Te6edf3sdkIntTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3manufacturer Tff7b72= Te6edf3manufacturerTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3model Tff7b72= Te6edf3modelTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3device Tff7b72= Te6edf3deviceTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tf0883e@NonNull
Tff7b72public Tff7b72static Te6edf3Diagnostics Td2a8ffcollectTb4b4b4(Tf0883e@NonNull Te6edf3Context Te6edf3contextTb4b4b4) Tb4b4b4{
Te6edf3String Te6edf3versionName Tff7b72= Ta5d6ff"Ta5d6ffunknownTa5d6ff"Tb4b4b4;
Te6edf3String Te6edf3versionCode Tff7b72= Ta5d6ff"Ta5d6ffunknownTa5d6ff"Tb4b4b4;
Tff7b72try Tb4b4b4{
Te6edf3PackageInfo Te6edf3pi Tff7b72= Te6edf3context
Tb4b4b4.Te6edf3getPackageManagerTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3getPackageInfoTb4b4b4(Te6edf3contextTb4b4b4.Te6edf3getPackageNameTb4b4b4(Tb4b4b4)Tb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3piTb4b4b4.Te6edf3versionName Tff7b72!Tff7b72= Tff7b72null Tff7b72&Tff7b72& Tff7b72!Te6edf3piTb4b4b4.Te6edf3versionNameTb4b4b4.Te6edf3isEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3versionName Tff7b72= Te6edf3piTb4b4b4.Te6edf3versionNameTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3BuildTb4b4b4.Te6edf3VERSIONTb4b4b4.Te6edf3SDK_INT Tff7b72>Tff7b72= Te6edf3BuildTb4b4b4.Te6edf3VERSION_CODESTb4b4b4.Te6edf3PTb4b4b4) Tb4b4b4{
Te6edf3versionCode Tff7b72= Te6edf3LongTb4b4b4.Te6edf3toStringTb4b4b4(Te6edf3piTb4b4b4.Te6edf3getLongVersionCodeTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3versionCode Tff7b72= Te6edf3IntegerTb4b4b4.Te6edf3toStringTb4b4b4(Te6edf3piTb4b4b4.Te6edf3versionCodeTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3PackageManagerTb4b4b4.Te6edf3NameNotFoundException Te6edf3ignoredTb4b4b4) Tb4b4b4{
Tb4b4b4}
Tff7b72return Tff7b72new Te6edf3DiagnosticsTb4b4b4(
Te6edf3versionNameTb4b4b4,
Te6edf3versionCodeTb4b4b4,
Te6edf3BuildTb4b4b4.Te6edf3VERSIONTb4b4b4.Te6edf3RELEASETb4b4b4,
Te6edf3BuildTb4b4b4.Te6edf3VERSIONTb4b4b4.Te6edf3SDK_INTTb4b4b4,
Te6edf3BuildTb4b4b4.Te6edf3MANUFACTURERTb4b4b4,
Te6edf3BuildTb4b4b4.Te6edf3MODELTb4b4b4,
Te6edf3BuildTb4b4b4.Te6edf3DEVICE
Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tf0883e@NonNull
Tff7b72public Tff7b72static Te6edf3String Td2a8ffformatTb4b4b4(
Tf0883e@NonNull Te6edf3String Te6edf3titleTb4b4b4,
Tf0883e@Nullable Te6edf3String Te6edf3detailTb4b4b4,
Tf0883e@NonNull Te6edf3Diagnostics Te6edf3diagnostics
Tb4b4b4) Tb4b4b4{
Te6edf3StringBuilder Te6edf3sb Tff7b72= Tff7b72new Te6edf3StringBuilderTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3sbTb4b4b4.Te6edf3appendTb4b4b4(Te6edf3title Tff7b72=Tff7b72= Tff7b72null Tff7b72? Ta5d6ff"Ta5d6ffMeshChatX errorTa5d6ff" Tb4b4b4: Te6edf3titleTb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3sbTb4b4b4.Te6edf3appendTb4b4b4(Ta5d6ff'\n'Tb4b4b4)Tb4b4b4;
Te6edf3sbTb4b4b4.Te6edf3appendTb4b4b4(Te6edf3formatDiagnosticsBlockTb4b4b4(Te6edf3diagnosticsTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3detail Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3String Te6edf3trimmed Tff7b72= Te6edf3detailTb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3trimmedTb4b4b4.Te6edf3isEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3sbTb4b4b4.Te6edf3appendTb4b4b4(Ta5d6ff"Ta5d6ff\Ta5d6ffnTa5d6ff\Ta5d6ffnTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3sbTb4b4b4.Te6edf3appendTb4b4b4(Te6edf3trimmedTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72return Te6edf3sbTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tf0883e@NonNull
Tff7b72public Tff7b72static Te6edf3String Td2a8ffformatDiagnosticsBlockTb4b4b4(Tf0883e@NonNull Te6edf3Diagnostics Te6edf3diagnosticsTb4b4b4) Tb4b4b4{
Te6edf3StringBuilder Te6edf3sb Tff7b72= Tff7b72new Te6edf3StringBuilderTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3sbTb4b4b4.Te6edf3appendTb4b4b4(Ta5d6ff"Ta5d6ffApp: Ta5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3sbTb4b4b4.Te6edf3appendTb4b4b4(Te6edf3safeTb4b4b4(Te6edf3diagnosticsTb4b4b4.Te6edf3appVersionNameTb4b4b4, Ta5d6ff"Ta5d6ffunknownTa5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3String Te6edf3code Tff7b72= Te6edf3safeTb4b4b4(Te6edf3diagnosticsTb4b4b4.Te6edf3appVersionCodeTb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3codeTb4b4b4.Te6edf3isEmptyTb4b4b4(Tb4b4b4) Tff7b72&Tff7b72& Tff7b72!Ta5d6ff"Ta5d6ffunknownTa5d6ff"Tb4b4b4.Te6edf3equalsTb4b4b4(Te6edf3codeTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3sbTb4b4b4.Te6edf3appendTb4b4b4(Ta5d6ff"Ta5d6ff (Ta5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3appendTb4b4b4(Te6edf3codeTb4b4b4)Tb4b4b4.Te6edf3appendTb4b4b4(Ta5d6ff')'Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3sbTb4b4b4.Te6edf3appendTb4b4b4(Ta5d6ff'\n'Tb4b4b4)Tb4b4b4;
Te6edf3sbTb4b4b4.Te6edf3appendTb4b4b4(Ta5d6ff"Ta5d6ffAndroid: Ta5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3sbTb4b4b4.Te6edf3appendTb4b4b4(Te6edf3safeTb4b4b4(Te6edf3diagnosticsTb4b4b4.Te6edf3androidReleaseTb4b4b4, Ta5d6ff"Ta5d6ffunknownTa5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3diagnosticsTb4b4b4.Te6edf3sdkInt Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3sbTb4b4b4.Te6edf3appendTb4b4b4(Ta5d6ff"Ta5d6ff (API Ta5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3appendTb4b4b4(Te6edf3diagnosticsTb4b4b4.Te6edf3sdkIntTb4b4b4)Tb4b4b4.Te6edf3appendTb4b4b4(Ta5d6ff')'Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3sbTb4b4b4.Te6edf3appendTb4b4b4(Ta5d6ff'\n'Tb4b4b4)Tb4b4b4;
Te6edf3sbTb4b4b4.Te6edf3appendTb4b4b4(Ta5d6ff"Ta5d6ffDevice: Ta5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3String Te6edf3manufacturer Tff7b72= Te6edf3safeTb4b4b4(Te6edf3diagnosticsTb4b4b4.Te6edf3manufacturerTb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3String Te6edf3model Tff7b72= Te6edf3safeTb4b4b4(Te6edf3diagnosticsTb4b4b4.Te6edf3modelTb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3manufacturerTb4b4b4.Te6edf3isEmptyTb4b4b4(Tb4b4b4) Tff7b72&Tff7b72& Tff7b72!Te6edf3modelTb4b4b4.Te6edf3isEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3sbTb4b4b4.Te6edf3appendTb4b4b4(Te6edf3manufacturerTb4b4b4)Tb4b4b4.Te6edf3appendTb4b4b4(Ta5d6ff' 'Tb4b4b4)Tb4b4b4.Te6edf3appendTb4b4b4(Te6edf3modelTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Tff7b72!Te6edf3modelTb4b4b4.Te6edf3isEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3sbTb4b4b4.Te6edf3appendTb4b4b4(Te6edf3modelTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Tff7b72!Te6edf3manufacturerTb4b4b4.Te6edf3isEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3sbTb4b4b4.Te6edf3appendTb4b4b4(Te6edf3manufacturerTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3sbTb4b4b4.Te6edf3appendTb4b4b4(Ta5d6ff"Ta5d6ffunknownTa5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3String Te6edf3device Tff7b72= Te6edf3safeTb4b4b4(Te6edf3diagnosticsTb4b4b4.Te6edf3deviceTb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3deviceTb4b4b4.Te6edf3isEmptyTb4b4b4(Tb4b4b4) Tff7b72&Tff7b72& Tff7b72!Te6edf3deviceTb4b4b4.Te6edf3equalsIgnoreCaseTb4b4b4(Te6edf3modelTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3sbTb4b4b4.Te6edf3appendTb4b4b4(Ta5d6ff"Ta5d6ff [Ta5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3appendTb4b4b4(Te6edf3deviceTb4b4b4)Tb4b4b4.Te6edf3appendTb4b4b4(Ta5d6ff']'Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3sbTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tf0883e@NonNull
Tff7b72private Tff7b72static Te6edf3String Td2a8ffsafeTb4b4b4(Tf0883e@Nullable Te6edf3String Te6edf3valueTb4b4b4, Tf0883e@NonNull Te6edf3String Te6edf3fallbackTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3value Tff7b72=Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3fallbackTb4b4b4;
Tb4b4b4}
Te6edf3String Te6edf3trimmed Tff7b72= Te6edf3valueTb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3trimmedTb4b4b4.Te6edf3isEmptyTb4b4b4(Tb4b4b4) Tff7b72? Te6edf3fallback Tb4b4b4: Te6edf3trimmedTb4b4b4;
Tb4b4b4}
Tb4b4b4}
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────